vs2010添加文本框

您所在的位置:网站首页 mfc cancel属性 vs2010添加文本框

vs2010添加文本框

2023-06-27 22:55| 来源: 网络整理| 查看: 265

创建对话框资源需要创建对话框模板、修改对话框属性、为对话框添加各种控件等步骤,前面一讲中鸡啄米已经讲了创建对话框模板和修改对话框属性,本节继续讲如何为对话框添加控件。

???????上一讲中鸡啄米创建了一个名为“Addition”的工程,目的是生成一个实现加法运算的应用程序。实现加法计算有几个必要的因素:被加数、加数、和。被加数和加数需要输入,和需要输出显示。那么这几个因素都需要相应的控件来输入或显示,下面鸡啄米就一步步讲解如何添加这些控件。

???????1.为对话框添加一个静态文本框(Static Text),用于显示字符串--“被加数”。

???????上一讲中生成的资源模板中自动添加了一个标题为“TODO:Place dialog controls here.”的静态文本框,我们可以修改它的标题继续使用,也可以删掉它。这里为了从头讲解静态文本框的添加过程,将它删掉,继续添加新的静态文本框。

???????删除控件时,可以使用鼠标左键点击选中它,选中后控件的周围会出现虚线框,然后按Delete键就可以将其删除了。在“Addition”工程的ResourceView中打开上一讲中创建的对话框模板IDD_ADDITION_DIALOG,自动添加的静态文本框就可以使用这种方法删除。

???????在添加新的静态文本框以前,先看看Toolbox视图是否显示了,如果没有显示,在菜单栏上点击View->Toolbox即可。Toolbox视图如下图:

??????Toolbox中列出了一些常用控件,其中有一个是Static Text,即是我们要添加的控件。在Toolbox中的StaticText上点下鼠标左键不放开,并拖到IDD_ADDITION_DIALOG对话框模板上,模板上会出现一个虚线框,我们找到合适的位置松开鼠标左键放下它。

???????用鼠标左键选中控件后周围出现虚线框,然后鼠标移到虚线框上几个黑点的位置会变成双向箭头的形状,此时就可以按下鼠标左键并拖动来改变控件大小了。我们可以这样改变新添加的静态文本框控件的大小,以更好的显示标题。当然,整个对话框模板也可以用这种方法改变大小。

???????接下来就该修改静态文本框的文字了。鼠标右键点击静态文本框,在右键菜单中选择“Properties”,Properties面板就会显示出来,在面板上修改Caption属性为“被加数”,ID修改为IDC_SUMMAND_STATIC。此时模板如下图:

??????2.为对话框添加一个编辑框(EditControl),用来输入被加数。

???????添加编辑框的过程与静态文本框类似,在Toolbox中选中Edit Control控件拖到对话框模板上,并使其与之前的静态文本框水平对齐(为了美观),然后调整其大小使之适合被加数的输入。

???????在编辑框上点右键,仍然在右键菜单中选择“Properties”显示出属性(Properties)面板,修改其ID为IDC_SUMMAND_EDIT。此时模板如下图:

??????3.按照1的方法添加一个标题为“加数”的静态文本框,用于显示字符串--“加数”。并将其ID改为IDC_ADDEND_STATIC。

???????4.按照2的方法添加一个ID为IDC_ADDEND_EDIT的编辑框,用来输入加数。

???????5.按照1的方法添加一个标题为“和”的静态文本框,用于显示文字--“和”。并修改其ID为IDC_SUM_STATIC。

???????6.按照2的方法添加一个ID为IDC_SUM_EDIT的编辑框,用来显示最终的加和。

???????7.类似的添加按钮(Button)控件到对话框模板,用于在被点击后触发加法计算。修改其标题为“计算”,ID为IDC_ADD_BUTTON。

???????到此,对话框模板如图:

??????8.删除OK按钮。打开Cancel按钮的属性面板,将标题改为“退出”,并使其与“计算”按钮水平对齐。

???????9.根据控件的布局,适当调整整个对话框模板的大小,使其相对控件布局来说大小合适,界面美观。

???????这样在对话框模板中就把我们在本例中需要用到的控件就添加完了。最终效果如下:

??????

至此,我们的对话框资源就基本创建完了。应用程序运行后的界面效果已经很清楚了。后面鸡啄米会讲如何在对话框类中实现加法计算功能,并能很好的和界面交互。欢迎继续到鸡啄米博客交流。

? ? ? 上一节鸡啄米讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了。从本节开始鸡啄米将讲解各种常用控件的用法。常用控件主要包括:静态文本框、编辑框、单选按钮、复选框、分组框、列表框、组合框、图片控件、列表控件、树形控件和进度条控件等等。本节教程先来讲解静态文本框的使用。

???????控件的通知消息

?????? 在将静态文本框的使用之前,先大概讲讲控件的通知消息。

???????当控件有事件发生时,它会向父窗口发送通知消息。最常发生的事件就是鼠标单击了,此时控件会向父窗口发送BN_CLICKED消息,实际上也就是给父窗口发送WM_COMMAND消息,在wParam参数中包含有通知消息码(鼠标单击时的通知消息码就是BN_CLICKED)和控件ID,lParam参数中包含了控件的句柄。在MFC消息映射机制概述中,鸡啄米讲过,消息就是由三个部分组成:消息值、wParam参数和lParam参数。

?????? 为控件通知消息添加消息映射和消息处理函数的方法,之前不止一遍讲过了。现在再来具体说明下,控件的消息映射宏的格式大致是:

?????? ON_通知消息码(nID, memberFun)

?????? nID参数是控件的ID,memberFun参数是消息处理函数名。例如,ON_BN_CLICKED(IDC_BUTTON1, &CDlg::OnBnClickedButton1)。此消息映射宏应添加到BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间。

?????? 消息处理函数声明的语法形式为:

????? ?afx_msg void memberFun();

???????静态文本框的使用

?????? 在前面鸡啄米的举例中,大家应该也清楚了静态文本框的一般作用,就是用于显示文字说明。MFC提供了CStatic类,封装了对静态文本框的所有操作。

?????? 如果我们想在程序中动态创建静态文本框,而不是像前面那样直接从Toolbox中拖到对话框模板上,那么就需要使用CStatic类的成员函数Create。Create函数的原型如下:

virtual BOOL Create( ?? LPCTSTR lpszText, ?? DWORD dwStyle, ?? const RECT& rect, ?? CWnd* pParentWnd, ?? UINT nID = 0xffff? );

?????? 参数说明:

?????? lpszText:指定要在控件中显示的文字。如果为NULL则不会显示任何文字。

?????? dwStyle:指定静态控件的风格。静态文本框一般都是对话框或其他窗口的子窗口,而且是可见的,所以应该包含WS_CHILD 和WS_VISIBLE风格,另外,MSDN中说明,还可以为其设置“static control styles”中风格的任意组合。下面大概为大家说明几个风格:

SS_BITMAP一个位图将显示在静态控件中,Create函数的lpszText参数字符串是资源文件中定义的位图名。此风格忽略宽度和高度参数,静态控件自动调整它的尺寸来适应位图SS_BLACKFRAME指定一个具有与窗口边界同色的框,默认为黑色SS_BLACKRECT指定一个具有与窗口边界同色的实矩形,默认为黑色SS_CENTER使显示的正文居中对齐,正文可以换行SS_GRAYFRAME指定一个具有与屏幕背景同色的边框SS_GRAYRECT指定一个具有与屏幕背景同色的实矩形SS_ICON使控件显示一个在资源中定义的图标,图标的名字由Create 函数的lpszText 参数指定,图标自动调整它的尺寸SS_LEFT左对齐正文,正文能回绕SS_LEFTNOWORDWRAP左对齐正文,正文不能回绕SS_NOTIFY使控件能向父窗口发送鼠标事件消息SS_RIGHT右对齐正文,可以回绕SS_SIMPLE使静态正文在运行时不能被改变并使正文显示在单行中SS_WHITEFRAME指定一个具有与窗口背景同色的框,默认为白色SS_WHITERECT指定一个具有与窗口背景同色的实心矩形,默认为白色

?????? 我们在对话框模板添加静态文本框时,可以在静态文本框的属性页中设置它的风格,很多都与上面的风格是对应的,例如,Simple属性就相当于SS_SIMPLE风格。

?????? rect:指定静态控件的位置和大小,它可以是RECT结构体类型,也可以是CRect类的对象。

?????? pParentWnd:指定静态控件的父窗口,通常是一个CDialog对象,不能是NULL。

?????? nID:指定静态控件的ID。

???????CStatic类的成员函数简介

?????? 简单介绍下CStatic类的主要成员函数,下面是成员函数列表。

GetBitmap获取由SetBitmap函数设置的位图的句柄GetCursor?获取由SetCurSor设置的光标的句柄GetEnhMetaFile获取由SetEnhMetaFile设置的增强图元文件的句柄GetIcon获取由SetIcon设置的图标的句柄SetBitmap设置要在静态控件中显示的位图SetCursor设置要在静态控件中显示的光标图片SetEnhMetaFile设置要在静态控件中显示的增强图元文件SetIcon设置要在静态控件中显示的图标

?????? 除了上述成员函数外,由于CStatic是CWnd的派生类,CWnd的很多成员函数也可以使用,例如,GetWindowText、GetWindowRect、SetWindowText等。

?????? 静态文本框的基本应用方法在前面已经讲过,鸡啄米就不再举例,大家可以根据本节所讲进行试验,以对静态文本框有更多的认识。欢迎大家来鸡啄米交流学习。

????程序运行工具,采用Visual Studio 2010。实现MFC富文本框添加右键菜单步骤如下。

????1.选择菜单项文件->新建->项目,弹出“新建项目”对话框。

????2.左侧面板中“已安装的模板”的Visual C++下选择MFC,中间窗口中选择“MFC 应用程序”,保存至目标文件夹。然后在下面的名称编辑框中键入工程名称,本例将文件名命名为“RICHEDITMENUA”,在位置编辑框中设置工程的保存路径。点“确定”。

3.点“下一步”到“MFC应用程序向导”对话框,在“应用程序类型”下选择“基于对话框”,其他使用默认设置,点“完成”。

4、点击“视图”->"工具箱",将富文本框(Rich Edit 2.0 Control)添加到对话框中,并将默认添加的按钮和文字删去。

5、右键富文本框查看其属性,本例中将富文本框的ID改为IDC_RICHEDITMENU,其他属性默认。

6、点开RICHEDITMENU.cpp,进去其BOOL CRICHEDITMENUApp::InitInstance()程序中,将下列富文本框初始化程序放入。富文本框必须进行初始化,注意将这段程序位置尽量靠前,否则程序运行会提示内存泄漏。

//富文本框初始化

AfxInitRichEdit();

if (LoadLibrary(_T("RICHED20.DLL")) == NULL)

{

????AfxMessageBox(_T("Fail to load \"riched20.dll\"."),MB_OK | MB_ICONERROR);

????return FALSE;

}

7、点击视图->资源视图,右键工程选择添加->资源,右键添加的menu,可以更改menu的ID,也可以不更改,本例中ID改为IDR_MENUTEST。

8、添加按钮菜单的子菜单,分别为程序员,程序猿,程序媛,其ID分别为ID_TEST_PROGRAMER_ONE,ID_TEST_PROGRAMER_TWO,ID_TEST_PROGRAMER_THRE。保存后程序才能识别。再为每个子菜单添加消息类型为COMMAND的事件处理程序。

9、在资源视图中,通过类向导,给对话框添加消息处理函数。添加3个消息处理程序WM_RBUTTONUP、WM_CONTEXTMENU和WM_DESTROY。

10、修改void CRICHEDITMENUDlg::OnContextMenu(CWnd* pWnd, CPoint point)中的程序

添加如下代码:

????????CMenu popMenu;

//载入菜单

popMenu.LoadMenu(IDR_MENUTEST);

CMenu *pPopup;

//获得子菜单指针

pPopup=popMenu.GetSubMenu(0);

//允许菜单项使用

pPopup->EnableMenuItem(ID_TEST_PROGRAMER_ONE,MF_BYCOMMAND|MF_ENABLED);

//不允许菜单项使用

pPopup->EnableMenuItem(ID_TEST_PROGRAMER_TWO,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);

//允许菜单项使用

pPopup->EnableMenuItem(ID_TEST_PROGRAMER_THREE,MF_BYCOMMAND|MF_ENABLED);

//显示弹出菜单,参数依次为(鼠标在菜单左边|跟踪右键,x,y,this)

//pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,GetParent());

pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);

pPopup->Detach();

//销毁menu

在指定控件中弹出右键,代码如下

//定义矩形区域

CRect rect;

//获取控件区域的矩形

GetDlgItem(IDC_RICHTEST)->GetWindowRect(&rect);

if(rect.PtInRect(point))

{

CMenu menu;

VERIFY(menu.LoadMenu(IDR_MENUTEST));

CMenu* pPopup=menu.GetSubMenu(0);

ASSERT(pPopup!=NULL);

//pPopup=popMenu.GetSubMenu(0);

//允许菜单项使用

pPopup->EnableMenuItem(ID_ABC_CLEAR,MF_BYCOMMAND|MF_ENABLED);

pPopup->EnableMenuItem(ID_ABC_COPY,MF_BYCOMMAND|MF_ENABLED);

//不允许菜单项使用

//pPopup->EnableMenuItem(ID_ABC_COPY,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);

//在鼠标当前位置显示指定菜单

pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,point.x,point.y,this);

pPopup->Detach();

//销毁menu

menu.DestroyMenu();

}

11、程序运行结果如下。如需要给子菜单添加功能需要另外在对应事件处理程序出添加。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3